package org.ch02.test03;

import org.ch02.entity.Student;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * 反射常用 API - Field
 * @author ZJL
 * @date 2025-03-18
 */
public class MainTest03 {
    public static void main(String[] args) {
        // 第一：获取操作类的 Class对象
        Class<Student> clazz = Student.class;
        // 第二：基于 Class 对象，实现相关的操作 - 运行时、动态性
        // Class 对象可以获取类的所有信息（对象）
        // 获取类中所有的所有字段（属性）
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {

            // 获取字段（属性）修饰符 - 整型的表示
            int modifiers = field.getModifiers();
            System.out.println("字段访问修饰符（整型的表示）："+modifiers);
            // 获取字段（属性）修饰符 - 字符串的表示
            String modifiersStr = Modifier.toString(modifiers);
            System.out.println("字段访问修饰符（字符串的表示）：" + modifiersStr);

            // 获取字段（属性）的数据类型 - 数据类型的 Class 对象
            Class<?> type = field.getType();
            String name = type.getName();
            String simpleName = type.getSimpleName();
            System.out.println("字段数据类型（包名.类名）："+name);
            System.out.println("字段数据类型（类名|名称）："+simpleName);

            // 判断数据类型是否为基本数据类型
            boolean primitive = type.isPrimitive();
            System.out.println("是否为基本数据类型："+primitive);

            // 获得字段（属性）名称
            System.out.println("字段名称："+field.getName());
            System.out.println("\n-------------------------------------------\n");
        }
    }
}
